#Boa:Dialog:Dialog1

import wx
import wx.calendar
import utiles
from decimal import Decimal

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, 
 wxID_DIALOG1CHECKBOX1, wxID_DIALOG1FECHADESDE, wxID_DIALOG1FECHAHASTA, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, wxID_DIALOG1STATICTEXT6, 
 wxID_DIALOG1STATICTEXT7, wxID_DIALOG1STATICTEXT8, wxID_DIALOG1STATICTEXT9, 
 wxID_DIALOG1TEXTCODIGO, wxID_DIALOG1TEXTCUOTA, wxID_DIALOG1TEXTMONTO, 
 wxID_DIALOG1TEXTNOMBRE, wxID_DIALOG1TEXTNROFACTURA, 
 wxID_DIALOG1TEXTNRORECIBO, 
] = [wx.NewId() for _init_ctrls in range(21)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(454, 253), size=wx.Size(411, 322),
              style=wx.DEFAULT_DIALOG_STYLE, title='Buscar Cuota')
        self.SetClientSize(wx.Size(403, 295))
        self.Enable(True)
        self.SetAutoLayout(True)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Nombre', name='staticText1', parent=self, pos=wx.Point(24,
              56), size=wx.Size(37, 13), style=0)

        self.textNombre = wx.TextCtrl(id=wxID_DIALOG1TEXTNOMBRE,
              name='textNombre', parent=self, pos=wx.Point(96, 56),
              size=wx.Size(280, 21), style=0, value='')
        self.textNombre.SetEditable(False)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Nro. Factura', name='staticText2', parent=self,
              pos=wx.Point(24, 96), size=wx.Size(61, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Nro. Recibo', name='staticText3', parent=self,
              pos=wx.Point(24, 132), size=wx.Size(56, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Nro. Cuota', name='staticText4', parent=self,
              pos=wx.Point(24, 170), size=wx.Size(53, 13), style=0)

        self.textNroFactura = wx.TextCtrl(id=wxID_DIALOG1TEXTNROFACTURA,
              name='textNroFactura', parent=self, pos=wx.Point(96, 96),
              size=wx.Size(100, 21), style=0, value='')
        self.textNroFactura.Bind(wx.EVT_KILL_FOCUS, self.VerificarNroFactura)

        self.textNroRecibo = wx.TextCtrl(id=wxID_DIALOG1TEXTNRORECIBO,
              name='textNroRecibo', parent=self, pos=wx.Point(96, 134),
              size=wx.Size(100, 21), style=0, value='')
        self.textNroRecibo.Bind(wx.EVT_KILL_FOCUS, self.VerificarNroRecibo)

        self.textCuota = wx.TextCtrl(id=wxID_DIALOG1TEXTCUOTA, name='textCuota',
              parent=self, pos=wx.Point(96, 170), size=wx.Size(24, 21), style=0,
              value='')
        self.textCuota.Bind(wx.EVT_KILL_FOCUS, self.VerificarNroCuota)

        self.textMonto = wx.TextCtrl(id=wxID_DIALOG1TEXTMONTO, name='textMonto',
              parent=self, pos=wx.Point(96, 208), size=wx.Size(100, 21),
              style=0, value='0.00')
        self.textMonto.Bind(wx.EVT_KILL_FOCUS, self.VerificarMonto)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='Monto', name='staticText5', parent=self, pos=wx.Point(24,
              208), size=wx.Size(30, 13), style=0)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Aceptar',
              name='button1', parent=self, pos=wx.Point(208, 248),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBotonAceptar,
              id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Cancelar',
              name='button2', parent=self, pos=wx.Point(300, 248),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnBotonCancelar,
              id=wxID_DIALOG1BUTTON2)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='Codigo', name='staticText6', parent=self, pos=wx.Point(24,
              24), size=wx.Size(33, 13), style=0)

        self.textCodigo = wx.TextCtrl(id=wxID_DIALOG1TEXTCODIGO,
              name='textCodigo', parent=self, pos=wx.Point(96, 24),
              size=wx.Size(64, 21), style=0, value='')
        self.textCodigo.SetEditable(False)

        self.fechaDesde = wx.DatePickerCtrl(id=wxID_DIALOG1FECHADESDE,
              name='fechaDesde', parent=self, pos=wx.Point(280, 133),
              size=wx.Size(96, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.fechaDesde.Enable(False)

        self.fechaHasta = wx.DatePickerCtrl(id=wxID_DIALOG1FECHAHASTA,
              name='fechaHasta', parent=self, pos=wx.Point(280, 173),
              size=wx.Size(96, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.fechaHasta.Enable(False)

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='Desde', name='staticText7', parent=self, pos=wx.Point(237,
              136), size=wx.Size(30, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_DIALOG1STATICTEXT8,
              label='Hasta', name='staticText8', parent=self, pos=wx.Point(237,
              176), size=wx.Size(28, 13), style=0)

        self.checkBox1 = wx.CheckBox(id=wxID_DIALOG1CHECKBOX1,
              label='Incluye buscar por fecha?', name='checkBox1', parent=self,
              pos=wx.Point(236, 104), size=wx.Size(148, 13), style=0)
        self.checkBox1.SetValue(False)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnCheckBoton,
              id=wxID_DIALOG1CHECKBOX1)

        self.staticText9 = wx.StaticText(id=wxID_DIALOG1STATICTEXT9,
              label='(+ - $5)', name='staticText9', parent=self,
              pos=wx.Point(208, 212), size=wx.Size(38, 13), style=0)

    def __init__(self, parent, idcliente, nombre):
        self._init_ctrls(parent)
        self.textCodigo.SetValue(idcliente)
        self.textNombre.SetValue(nombre)
        self.idcliente = idcliente
        self.sql = ""
        self.seleccion = False

        primerDia = utiles.getDaysExtreme()[0]
        ultimoDia = utiles.getDaysExtreme()[1]
        utiles.cargar_fecha(primerDia, self.fechaDesde)
        utiles.cargar_fecha(ultimoDia, self.fechaHasta)

    def controlNumero(self, valor):
        for caracter in valor:
            if caracter not in ["0","1","2","3","4","5","6","7","8","9"]: return False
        return True

    def controlRecibo(self, valor):
        for caracter in valor:
            if caracter not in ["0","1","2","3","4","5","6","7","8","9","-"]: return False
        return True

    def VerificarNroFactura(self, event):
        if (not self.controlNumero(self.textNroFactura.GetValue())) and (self.textNroFactura.GetValue() != ""):
            utiles.mensaje(None,"Nro. Factura debe ser un valor numerico")
            self.textNroFactura.SetValue("")

    def VerificarNroRecibo(self, event):
        if (not self.controlRecibo(self.textNroRecibo.GetValue())) and (self.textNroRecibo.GetValue() != ""):
            utiles.mensaje(None,"Nro. Recibo debe ser un valor numerico")
            self.textNroRecibo.SetValue("")

    def VerificarNroCuota(self, event):
        if not self.controlNumero(self.textCuota.GetValue()):
            utiles.mensaje(None,"El Nro. de Cuota debe ser un valor numerico")
            self.textCuota.SetValue("")

    def VerificarMonto(self, event):
        if (not utiles.isDecimal(self.textMonto.GetValue())):
            utiles.mensaje(None,"El Monto debe ser un valor numerico")
            self.textMonto.SetValue("0.00")

    def OnBotonAceptar(self, event):
        self.seleccion = True
        condicion1 = "" #nrofactura
        condicion2 = "" #nrorecibo
        condicion3 = "" #nrocuota
        condicion4 = "" #monto
        condicion5 = "" #fechas
        if self.textNroFactura.GetValue() != "":
            condicion1 = " AND nrofactura = '%s' " % (self.textNroFactura.GetValue())
        if self.textNroRecibo.GetValue() != "":
            condicion2 = " AND idrecibo = '%s' " % (self.textNroRecibo.GetValue())
        if self.textCuota.GetValue() != "":
            condicion3 = " AND cuota = '%s' " % (self.textCuota.GetValue())
        if Decimal(self.textMonto.GetValue()) != Decimal("0.00"):
            monto = Decimal(self.textMonto.GetValue())
            montoMas   = monto - Decimal("5.00")
            montoMenos = monto + Decimal("5.00")
            condicion4 = " AND montocuota BETWEEN '%s' AND '%s' " % (str(montoMas),str(montoMenos))
        if self.checkBox1.GetValue():
            rangoDesde = str(self.fechaDesde.GetValue())[0:8]
            rangoDesde = rangoDesde[-2:]+"/"+rangoDesde[:2]+"/"+rangoDesde[3:5]
            rangoHasta = str(self.fechaHasta.GetValue())[0:8]
            rangoHasta = rangoHasta[-2:]+"/"+rangoHasta[:2]+"/"+rangoHasta[3:5]
            condicion5 = " AND vencimiento BETWEEN '%s' AND '%s' " % (rangoDesde,rangoHasta)
        else:
            #por default, la consulta en fechas se hace entre el primer y ultimo dia del anio
            primerDia = utiles.getDaysExtreme()[0]
            primerDia = utiles.sumarDiasAFecha(primerDia,-180)
            primerDia = str(primerDia)[:10]
            #primerDia = primerDia[2:4]+"/01/01"
            primerDia = primerDia[2:4]+"/"+primerDia[5:7]+"/"+primerDia[-2:]
            ultimoDia = utiles.getDaysExtreme()[1]
            ultimoDia = str(ultimoDia)[:10]
            #ultimoDia = ultimoDia[2:4]+"/12/31"
            ultimoDia = ultimoDia[2:4]+"/"+ultimoDia[5:7]+"/"+ultimoDia[-2:]
            condicion5 = " AND vencimiento BETWEEN '%s' AND '%s' " % (primerDia,ultimoDia)
            
        self.sql = "SELECT * FROM vtas_ctasctes WHERE idcliente = '" + self.idcliente + "'" + condicion1 + condicion2 + condicion3 + condicion4 + condicion5
        self.sql+= " ORDER BY vencimiento"
        self.Close()

    def OnBotonCancelar(self, event):
        self.sql = ""
        self.Close()

    def getConsultaSQL(self):
        return self.sql

    def OnCheckBoton(self, event):
        if self.checkBox1.GetValue():
            self.fechaDesde.Enable(True)
            self.fechaHasta.Enable(True)
        else:
            self.fechaDesde.Enable(False)
            self.fechaHasta.Enable(False)
